<?php

class OciosController extends AppController 
{
	
	public $uses = array('Ocio','Sede','Procedimiento');	
	
	public $bandera = true;
	
	#---------------------------------------------------#
	#---------------Funciones Principales---------------#
	#---------------------------------------------------#
	public function index()
	{
		$this->layout = 'default_ini';	  
	}
	
	public function add_ocio()
	{
		$this->layout = 'default_ini';		
		$this->setParamtersAdd();
		if($this->request->is('post') || $this->request->is('put'))
		{
			
			
				
			$info_ocio = array( 
										'Ocio' => array(
															'sede_id' => $this->request->data['Ocio']['sede_id'],
															'rif_ocio' => $this->request->data['Ocio']['prefijo_rif_ocio'].'-'.
																				$this->request->data['Ocio']['rif_ocio'],
															'nombre_establecimiento_ocio' => $this->request->data['Ocio']['nombre_establecimiento_ocio'],
															'horario_inic' => $this->request->data['Ocio']['horario_inic'],
															'horario_fin' => $this->request->data['Ocio']['horario_fin'],
															'fecha_inic' => date('Y-m-d'),
															'descripcion_ocio' => $this->request->data['Ocio']['descripcion_ocio'],
															'nro_tlf_ocio_1' => $this->request->data['Ocio']['prefijo_telefono_ocio_1'].
																					$this->request->data['Ocio']['nro_tlf_ocio_1'],
															'nro_tlf_ocio_2' => $this->request->data['Ocio']['prefijo_telefono_ocio_2'].
																					$this->request->data['Ocio']['nro_tlf_ocio_2'],
															'email_ocio' => $this->request->data['Ocio']['email_ocio']	
															
														) 
									);	
				

			//debug($info_ocio);
				
			$this->postAddOcio($info_ocio);
		}
	}
	
	public function consult_ocio()
	{
		$this->layout = 'default_ini';	
		$this->infoConsultOcio();
	}
	
	public function consult_ocio1($id_sede,$nombre_ocio = null)
	{
		$this->layout = 'default_ini';	
		if ($id_sede == "")
		{
			$this->setMessageFlash(2, 'error id_sede', null);
		}
		elseif ($nombre_ocio == "")
		{
			$this->setMessageFlash(2, 'error $nombre_ocio', null);
		}
		else
		{
			$this->infoConsultOcio($id_sede,$nombre_ocio);
			if($this->request->is('post') || $this->request->is('put'))
			{
				$this->postConsultOcio();
			}
		}
	}
	
	public function edit_ocio ($id_ocio = null)
	{
		$this->layout = 'default_ini';	
		if($id_ocio == "")
		{
			$this->setMessageFlash(2, 'error id_ocio', null);
		}
		else 
		{
			$this->llenarInfoOcio(2, $id_ocio);
			if($this->request->is('post') || $this->request->is('put'))
			{			
				$this->postEditOcio();
			}
			
		}
	}
	
	public function detalle_ocio ($id_ocio = null)
	{
		$this->layout = 'default_ini';	
		if($id_ocio == "")
		{
			$this->setMessageFlash(2, 'error id_ocio', null);
		}
		else 
		{
			$this->llenarInfoOcio(1, $id_ocio);
			
		}
	}
	
	public function proc_activacion_desactivacion_ocio($id_ocio,$id_active,$id_val)
	{
		if($id_ocio == "")
		{
			$this->setMessageFlash(3, "error id_ocio", null);
		}
		elseif($id_active == "")
		{
			$this->setMessageFlash(3, "error id_active", null);
		}
		elseif ($id_val == "")
		{
			$this->setMessageFlash(3, "error id_val", null);
		}
		else 
		{
			if ($id_val == 1) // Si solo se va activar/descativar un ocio
			{
				$this->proceso_de_act_deact_single($id_ocio,$id_active);
			}
			elseif ($id_val == 2)  // Si se va activar/descativar un grupo de ocios
			{
				
				if ($this->length_arreglo_ocio($id_ocio) > 2)
				{
					$this->proceso_de_act_deact_multiples($id_ocio,$id_active);
				}
				elseif ($this->length_arreglo_ocio($id_ocio) == 2)  
				{
					
					$ocio = explode(',', $id_ocio);
					$this->proceso_de_act_deact_single($ocio[1],$id_active);
				}
				
			}
			else 
			{
					$this->setMessageFlash(3, "error", null);
			}
			//$this->redirect($this->referer());
		}
	}
	
	#---------------------------------------------------#
	#---------------Funciones Secundarias---------------#
	#---------------------------------------------------#
	
	public function setParamtersAdd()
	{
		$this->llenar_combobox_sede(2);
		$this->llenar_combobox_prefijo_rif();
		$this->llenar_combobox_prefijo_telefono();
	}
	

	
	private function setMessageFlash($id,$mensaje,$nombre_mensaje)
	{
		if (is_null($nombre_mensaje))
		{
			$nombre_mensaje = 'flash';
		}
		switch ($id) 
		{
			case 1: // mensaje bueno
				$this->Session->setFlash($mensaje,'default',array('class'=>'success'),$nombre_mensaje);
				break;
			case 2: // mensaje malo
				$this->Session->setFlash($mensaje,'default',array('class'=>'error-message'),$nombre_mensaje);
				break;
			case 3: // mensaje cuidado
				$this->Session->setFlash($mensaje,'default',array('class'=>'notice'),$nombre_mensaje);
				
				break;
			
			default:
				
				break;
		}
	}
	
	public function getDetalleOcio($id_ocio)
	{
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->llenarInfoOcio(1, $id_ocio);
			$this->render('/Elements/GetDetalleOcio');
		}
	}
	public function getErrors($errors)
	{
		$errores_view = '';
		
		if (array_key_exists('nombre_establecimiento_ocio', $errors))
		{
			$errores_view = $errores_view .'|'.'Nombre del Establecimiento'.'++'.$errors['nombre_establecimiento_ocio'][0];
		}
		if (array_key_exists('rif_ocio', $errors))
		{
			$errores_view = $errores_view .'|'.'Rif del Establecimiento'.'++'.$errors['rif_ocio'][0];
		}
		if (array_key_exists('sede_id', $errors))
		{
			$errores_view = $errores_view .'|'.'Sede de la Empresa'.'++'.$errors['sede_id'][0];
		}
		
		if (array_key_exists('nro_tlf_ocio_1', $errors))
		{
			$errores_view = $errores_view .'|'.'Numero de Telefono Principal del Establecimiento'.'++'.$errors['nro_tlf_ocio_1'][0];
		}
		if (array_key_exists('nro_tlf_ocio_2', $errors))
		{
			$errores_view = $errores_view .'|'.'Numero de Telefono Secundario del Establecimiento'.'++'.$errors['nro_tlf_ocio_2'][0];
		}
		if (array_key_exists('email_ocio', $errors))
		{
			$errores_view = $errores_view .'|'.'Email del Establecimiento'.'++'.$errors['email_ocio'][0];
		}
		if (array_key_exists('calendario_fecha_inic', $errors))
		{
			$errores_view = $errores_view .'|'.'Fecha de Inicip de Operaciones'.'++'.$errors['calendario_fecha_inic'][0];
		}

		return $errores_view;
		
		
	}
	public function parserError($error)
	{
		$array_error = array();	
			
		$string_error = explode('|', $error);
		
		for ($i = 0; $i < count($string_error); $i++)
		{
			if ($i != 0)
			{
				$string_problema = explode('++',$string_error[$i]);
					
				array_push($array_error,array(
												'campo' => $string_problema[0],
												'error' => $string_problema[1],
												)
							);
			}
			
		}
		return $array_error;
	}
	public function getEditOcio($id_ocio,$error = null)
	{
		$this->layout = false;
		
		if ($this->request->is('get')) 
		{
			$this->llenarInfoOcio(2, $id_ocio);
			
			if ($error)
			{
				$this->set('errors',$this->parserError($error));	
			}
			else
			{
				$this->set('errors',null);	
			}
			
			
			$this->render('/Elements/GetEditOcio');
		}
		elseif ($this->request->is('post') || $this->request->is('put') )
		{
	
			
			$date_desde = $this->getFechaFormAdd($this->request->data['calendario_fecha_inic']);
			$date_hasta = null;
			if (array_key_exists('calendario_fecha_fin', $this->request->data))
			{	
				$date_hasta = $this->getFechaFormAdd($this->request->data['calendario_fecha_fin']);
			}
			
			$info_ocio = array( 
										'Ocio' => array(
															'id' => $this->request->data['id'],
															'sede_id' => $this->request->data['sede_id'],
															'rif_ocio' => $this->request->data['prefijo_rif_ocio'].'-'.
																				$this->request->data['sufijo_rif_ocio'],
															'nombre_establecimiento_ocio' => $this->request->data['nombre_establecimiento_ocio'],
															'horario_inic' => $this->request->data['horario_inic'],
															'horario_fin' => $this->request->data['horario_fin'],
															'fecha_inic' => $date_desde,
															'fecha_fin' => $date_hasta,
															'status_ocio' => $this->request->data['status_del_ocio'],
															'descripcion_ocio' => $this->request->data['descripcion_ocio'],
															'nro_tlf_ocio_1' => $this->request->data['prefijo_tlf_ocio_1'].
																					$this->request->data['sufijo_tlf_ocio_1'],
															'nro_tlf_ocio_2' => ($this->request->data['sufijo_tlf_ocio_2'] == null ?
																					null : 
																					$this->request->data['prefijo_tlf_ocio_2'].
																					$this->request->data['sufijo_tlf_ocio_2']),
															'email_ocio' => $this->request->data['email_ocio']	
															
														) 
									);	
			
			$this->postEditOcio($info_ocio);
		}
		
	}
	
	public function getGridConsultOcio($id_sede,$nombre_ocio,$rif_ocio)
	{
		
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->llenar_ocio($id_sede,$nombre_ocio,$rif_ocio);
			$this->render('/Elements/GridConsultOcio');
		}
		
	}
	
	private function llenar_combobox_sede($id)
	{
		$sedes = $this->Sede->find('all');
		
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array( 0 => 'Todos'));
		}
		
		foreach ($sedes as $sede) 
		{
				array_push($arreglo, array( $sede['Sede']['id'] => $sede['Sede']['nombre_sede']));
		}
		
		$this->set('sedes',$arreglo);

	}
	public function getFechaFormAdd($fecha)
	{
		$separacion_fecha = explode('/', $fecha);
		$string_fecha = ''.$separacion_fecha[2].'-'.$separacion_fecha[1].'-'.$separacion_fecha[0];
		
		return date($string_fecha);
	}
	private function length_arreglo_ocio($arreglo_ocio)
	{
		$ocios = explode(',', $arreglo_ocio);
		return count($ocios);
	}
	
	private function proceso_de_act_deact_single ($id_ocio,$id_active)
	{
		$this->layout = false;	
		$ocio = $this->Ocio->findById($id_ocio);
		if ($ocio)
		{
			if ($this->proceso_de_act_deact($id_ocio,$id_active))
			{
				if ($id_active == 1) # proceso de activacion
				{
					$this->setMessageFlash(1, 'Se ha activado el establecimiento', null);
					
				}
				elseif ($id_active == 2)
				{
					
					$this->setMessageFlash(1, 'Se ha desactivado el establecimiento', null);
				}
			}
			else 
			{
				
				$this->setMessageFlash(2, 'No se pudo completar el proceso de Activacion/Desactivacion del establecimiento', null);
			}
		}
		
	}
	
	private function proceso_de_act_deact_multiples($id_ocio,$id_active)
	{
		$this->layout = false;	
		$ocios = explode(',', $id_ocio);
		
		$buenas = array();
		$malas = array();
		
		
		foreach ($ocios as $ocio ) 
		{
			if($ocio != "")
			{
				$ocio_ext = $this->Ocio->findById($ocio);
				if ($ocio_ext) 
				{
					if ($this->proceso_de_act_deact($ocio,$id_active))
					{
						array_push($buenas,$ocio);
					}
					else 
					{
						array_push($malas,$ocio);
					}
				}
			}
		}
		if ($buenas != null )
		{
			if ($malas != null)
			{
				$this->setMessageFlash(2, 'No se pudo terminar por completo el proceso', null);
				return 3; // significa que varias se pudieron eliminar, otras no.
			}
			else 
			{
					
				if ($id_active == 1) # proceso de activacion
				{
					$this->setMessageFlash(1, 'Se Activo los establecimientos seleccionados', null);
				}
				elseif ($id_active == 2)
				{
					$this->setMessageFlash(1, 'Se Desactivo los establecimientos seleccionados', null);
				}
				
				return 1; // significa que todas se pudieron eliminar.
			}
		}
		else 
		{
			if ($malas != null)
			{
				if ($id_active == 1) # proceso de activacion
				{					
					$this->setMessageFlash(2, 'No Se Activo los establecimientos seleccionados', null);
				}
				elseif ($id_active == 2)
				{					
					$this->setMessageFlash(2, 'No Se Desactivo los establecimientos seleccionados', null);
				}
				
				return 2; //significa que no se puedieron eliminar ninguna
			}
			else 
			{				
				$this->setMessageFlash(2, 'error al Activar/Desactivar', null);
				return 0; // error
			}
		}

	}
	
	private function proceso_de_act_deact($id_ocio,$id_active)
	{
		
		try
		{
			
			if ($id_active == 1) # proceso de activacion
			{
					$this->Ocio->query('UPDATE 
											ocios SET status_ocio = TRUE, fecha_fin = NULL WHERE id = '. $id_ocio);
					return true;
			}
			elseif ($id_active == 2) # proceso de desactivacion
			{		
					$this->Ocio->query('UPDATE 
											ocios SET status_ocio = FALSE, fecha_fin = "'. date("Y-m-d").'" WHERE id = '. $id_ocio);
					return true;
			}
			
		}
		catch (Exception $ee)
		{
			$this->setMessageFlash(2, 'No Se completo el proceso de Activacion/Desactivacion del ocio(s)', null);
			return false;
		}
		
		
		
	}
	
	private function validar_fechas($fecha_inic, $fecha_fin)
	{
		
		if (strtotime($fecha_inic) < strtotime($fecha_fin))
		{
			return true;
		}
		else 
		{
			return false;	
		}
		
		
	}

	private function postEditOcio($info_ocio)
	{
		$val = true;
		
				
		
		if ($info_ocio['Ocio']['status_ocio'] == 0)
		{
			
			$val = $this->validar_fechas($info_ocio['Ocio']['fecha_inic'],  $info_ocio['Ocio']['fecha_fin']);
			
		}
		
		if($val)
		{
				
			$this->Ocio->create();
			
			$this->Ocio->set($info_ocio);
		
			$error = null;
			
			if ($this->Ocio->validates()) 
			{
    		
			
				if ($this->Ocio->save($info_ocio))
				{
					$this->setMessageFlash(1, 'Se guardo los cambios', null);
				}
				else 
				{
					$this->setMessageFlash(2, 'No se guardo los cambios', null);
					
				}
					
			}
			else 
			{
				 $this->setMessageFlash(2, 'No se guardo los cambios del Ocio',null);
			
				 $error = $this->getErrors( $this->Ocio->validationErrors);
			}
			
			$this->redirect(array(
												'controller' => 'Ocios',
												'action' => 'getEditOcio',$this->Ocio->id,$error
										   )
									 );
			
		}
		else 
		{
			$this->setMessageFlash(2, 'La fecha de inicio es mayor que el fin', null);
			$this->redirect(array(
											'controller' => 'Ocios',
											'action' => 'getEditOcio',$info_ocio['Ocio']['id']
									   )
								 );
		}
		
	}
	
	private function llenarInfoOcio($id_busqueda,$id_ocio)
	{
		if ($id_busqueda == 2) // si es para edit
		{
			$this->llenar_combobox_sede(2);
			$this->llenar_combobox_prefijo_rif();
			$this->llenar_combobox_prefijo_telefono();
		}
		$this->infoOcioEspecifica($id_ocio,$id_busqueda);
	}
	
	private function infoOcioEspecifica($id_ocio,$id_busq)
	{
		$ocios = $this->Ocio->query('SELECT COALESCE( O.fecha_fin,  "-") fecha_fin, 
										YEAR( O.fecha_inic ) fecha_inic, S . * , O . * 
										FROM ocios O, sedes S
										WHERE O.sede_id = S.id 
										AND O.id ='.$id_ocio);

	
		
		if ($id_busq == 2)
		{
			$rif_del_ocio = explode('-',$ocios[0]['O']['rif_ocio']);
			
			for ($i=0; $i < count($rif_del_ocio); $i++) 
			{
				$string_agregar = "";
				if ($i > 1)
				{
					$string_agregar = '-'.$rif_del_ocio[$i];
				}
				$rif_del_ocio[1] = $rif_del_ocio[1].$string_agregar;
			}
			
			$prefijo_numero_ocio_1 = null;
			$sufijo_numero_ocio_1 = null;
			$prefijo_numero_ocio_2 = null;
			$sufijo_numero_ocio_2 = null;
			
			$prefijo_numero_ocio_1 = substr($ocios[0]['O']['nro_tlf_ocio_1'],0,4);
			$sufijo_numero_ocio_1 = substr($ocios[0]['O']['nro_tlf_ocio_1'],3,strlen($ocios[0]['O']['nro_tlf_ocio_1']));
			
			if ($ocios[0]['O']['nro_tlf_ocio_2'])
			{
				$prefijo_numero_ocio_2 = substr($ocios[0]['O']['nro_tlf_ocio_2'],0,4);
				$sufijo_numero_ocio_2 = substr($ocios[0]['O']['nro_tlf_ocio_2'],3,strlen($ocios[0]['O']['nro_tlf_ocio_2']));
			}
			
			$ocios[0]['O']['prefijo_rif_ocio'] = $rif_del_ocio[0];
			$ocios[0]['O']['sufijo_rif_ocio'] = $rif_del_ocio[1];
			
			$ocios[0]['O']['prefijo_tlf_ocio_1'] = $prefijo_numero_ocio_1;
			$ocios[0]['O']['sufijo_tlf_ocio_1'] = $sufijo_numero_ocio_1;
			
			$ocios[0]['O']['prefijo_tlf_ocio_2'] = $prefijo_numero_ocio_2;
			$ocios[0]['O']['sufijo_tlf_ocio_2'] = $sufijo_numero_ocio_2;

		}
				
		$this->set('ocios',$ocios);
		//$this->cambiar_formato_fecha($ocios);
	}
	
	private function postConsultOcio()
	{
		
		$nombre_ocio_busq = $this->request->data['Consult_Ocio']['nombre_ocio_busq'];
		$id_sede_busq =	$this->request->data['Consult_Ocio']['sede_busq'];	
		if ($nombre_ocio_busq == NULL)
		{
			$nombre_ocio_busq = "*";
		}
		
		$this->redirect(array('action' => 'consult_ocio',$id_sede_busq,$nombre_ocio_busq));
		
	}
	
	private function llenar_ocio($id_sede,$nombre_ocio,$rif_ocio)
	{
		$strqry = 'SELECT *
					FROM ocios O, sedes S
					WHERE O.sede_id = S.ID';
		
		if ($id_sede != 0)
		{
			$strqry = $strqry.' AND O.sede_id = '.$id_sede;
		}
		if ($nombre_ocio != "*")
		{
			$strqry = $strqry.' AND O.nombre_establecimiento_ocio LIKE "%'.$nombre_ocio.'%"';
		}
		if ($rif_ocio != "*")
		{
			$strqry = $strqry.' AND O.rif_ocio LIKE "%'.$rif_ocio.'%"';
		}
		$strqry = $strqry.' ORDER BY O.id ASC';
		$ocios = $this->Ocio->query($strqry);
		$this->set('ocios',$ocios);
		
	}
	
	private function infoConsultOcio()
	{
		$this->llenar_combobox_sede(1);
		$this->llenar_combobox_prefijo_rif();
		//$this->llenar_ocio($id_sede,$nombre_ocio);
		//$this->set('id_sede',$id_sede);
		//$this->set('nombre_ocio',$nombre_ocio);
	}
	public function llenar_combobox_prefijo_telefono()
	{
		$arreglo_prefijo_telefono = array(
												'0212' => '0212',
												'0412' => '0412',
												'0414' => '0414',
												'0424' => '0424',
												'0416' => '0416',
												'0426' => '0426'
											);
		$this->set('arreglo_prefijo_telefono',$arreglo_prefijo_telefono);				
	}
	
	public function llenar_combobox_prefijo_rif()
	{
		$arreglo_prefijo_rif = array(
												'E' => 'E',
												'G' => 'G',
												'J' => 'J',
												'V' => 'V'
												
											);
		$this->set('arreglo_prefijo_rif',$arreglo_prefijo_rif);				
	}
	private function postAddOcio($info_ocio)
	{
		
		$this->Ocio->create();
		
		if($this->Ocio->save($info_ocio))
		{
			$this->setMessageFlash(1, "Se guardo el Ocio", null);
			$this->redirect(
								array(
											'action' => 'index'
										)
							);
		}
		else
		{
			$this->setMessageFlash(2, "No se guardo el Ocio", null);
		}
	}
	
	
}



?>